---
title: "Curriculum Mapper"
type: entity
created: 2026-04-18
updated: 2026-04-18
sources: ["raw/articles/06-reading-telemetry.md", "raw/notes/memory.md"]
tags: [service, curriculum-mapper, extraction, objectives]
---

# Curriculum Mapper

The Curriculum Mapper (CM) is the knowledge foundation of the [[Pickatale]] platform. It defines what every child in every territory should be learning by year level and subject — and stores those objectives as structured data that drives the rest of the platform.

## Service Details

| Attribute | Value |
|---|---|
| Domain | cm.readingtester.com |
| Server port | 3117 |
| Client port | 5176 |
| Code location | `/home/ubuntu/cm/` |
| Stack | tRPC (REST API does not exist yet — Phase 2 must-build) |
| Status | ✅ Live — 3,777 objectives (Turkey 3,692 · England 85) |

## What It Does

1. **Extracts objectives** from national curriculum documents via AI-powered extraction workers
2. **Stores objectives** as structured `curriculum_objective` records queryable by territory, subject, year level
3. **Generates lesson books** — the canonical non-fiction content for each objective (teacher-approved before serving)

## Scale

| Territory | Objectives | Notes |
|---|---|---|
| Turkey | 3,692 | Live. 5,366 unique docs extracted in total. |
| England | 85 | Live. |
| Total | 3,777 | In current DB. More territories planned. |

The Turkey run is the benchmark: 5,366 unique objective documents processed, yielding 3,692 structured objectives after deduplication and validation.

## Extraction Workers

Objectives are extracted by detached child processes that survive server restarts. Each worker is spawned with `spawnExtraction(territory, subject, yearLevel, extractionId)`.

See [[concepts/curriculum-mapper/Extraction Workers]] for full architecture.

## Lesson Book Pipeline

CM is Step 1 of the three-step lesson book pipeline:

1. **Step 1 (CM):** Extract and structure curriculum objective
2. **Step 2 (CM):** Generate general lesson book → teacher review → approval
3. **Step 3 (Learner Bot):** Personalize per child

See [[concepts/curriculum-mapper/Lesson Book Pipeline]] for the full spec.

## Critical Gap: REST API

⚠️ **Critical Gap (2026-04-18):** The CM currently uses tRPC only. The REST API endpoint `GET /api/v1/objectives` does not exist yet.

**Impact:** The Orchestrator cannot query CM programmatically. The Learner Bot cannot pull curriculum objectives for nightly cycle planning.

**Required endpoint:**
```
GET /api/v1/objectives?territory=England&year_level=3&subject=English
```

This is a **Phase 2 must-build** item — without it, the intelligent learning loop cannot close.

## Key Tables

| Table | Purpose |
|---|---|
| `curriculum_objectives` | Structured objective records (territory, year, subject, vocabulary, difficulty) |
| `extraction_runs` | Status tracking for each extraction worker run |
| `lesson_books` | Generated lesson book content (pending teacher review) |

## Related Pages

- [[concepts/curriculum-mapper/index|Curriculum Mapper Concept]] — architecture overview
- [[concepts/curriculum-mapper/Extraction Workers]] — how objectives are extracted
- [[concepts/curriculum-mapper/Lesson Book Pipeline]] — three-step book generation
- [[entities/Learner Bot]] — consumes CM objectives for per-child planning
